class CreateSistemasModulos < ActiveRecord::Migration
  
  def self.up
    # Tabela de sistemas - Guarda todos os sistemas da empresa para os quais podem
    # ser geradas requisições de desenvolvimento / atualização
    create_table(:sistemas) do |sis|
      sis.column :sigla, :string, :limit => 10, :null => false
      sis.column :descricao, :string, :limit => 50, :null => false
      sis.column :created_at, :datetime
      sis.column :updated_at, :datetime
    end
    
    # Tabela de módulos - Guarda todos os módulos pertencentes aos sistemas
    # cadastrados na tabela acima e associados a requisições
    create_table(:modulos) do |mod|
      mod.column :sistema_id, :integer, :null => false
      mod.column :nome, :string, :limit => 50, :null => false
      mod.column :created_at, :datetime
      mod.column :updated_at, :datetime
    end
    
    # Índices da tabela "modulos"
    add_index("modulos", "sistema_id", :name => "fk_modulos_sistema_id")
    
    # Tabela associativa - requisição <-> módulo
    create_table(:modulos_requisicoes, :id => false) do |mr|
      mr.column :modulo_id, :integer, :null => false
      mr.column :requisicao_id, :integer, :null => false
    end
    
    # Índices da tabela "modulos_requisicoes"
    add_index("modulos_requisicoes", "modulo_id", :name => "fk_modulos_requisicoes_modulo_id")
    add_index("modulos_requisicoes", "requisicao_id", :name => "fk_modulos_requisicoes_requisicao_id")
  end
  
  def self.down
    drop_table(:sistemas)
    drop_table(:modulos)
    drop_table(:modulos_requisicoes)
  end
  
end
